const resultEl = document.getElementById('result')
const lengthEl = document.getElementById('length')
const uppercaseEl = document.getElementById('uppercase')
const lowercaseEl = document.getElementById('lowercase')
const numbersEl = document.getElementById('numbers')
const symbolsEl = document.getElementById('symbols')
const generateBtn = document.getElementById('generate')
const clipboardBtn = document.getElementById('clipboard')

const randomFunc = {
    upper: getRandomUpper,
    lower: getRandomLower,
    number: getRandomNumber,
    symbol: getRandomSymbol
}

function getRandomUpper() {
    return String.fromCharCode(Math.floor(Math.random() * 26) + 65)
}
function getRandomLower() {
    return String.fromCharCode(Math.floor(Math.random() * 26) + 97)
}
function getRandomNumber() {
    return String.fromCharCode(Math.floor(Math.random() * 10) + 48)
}
function getRandomSymbol() {
    const symbols = '!@#$%^&*(){}[]=<>/,.'
    return symbols[Math.floor(Math.random() * symbols.length)]
}

clipboardBtn.addEventListener('click', () => {
    const password = resultEl.innerText
    if(!password) return ''
    navigator.clipboard.writeText(password)
    alert('Password copied to clipboard!')
})

generateBtn.addEventListener('click', () => {
    const length = lengthEl.value
    const hasUpper = uppercaseEl.checked
    const hasLower = lowercaseEl.checked
    const hasNumber = numbersEl.checked
    const hasSymbol = symbolsEl.checked

    resultEl.innerText = generatePassword(hasLower, hasUpper, hasNumber, hasSymbol, length)
})

function generatePassword(lower, upper, number, symbol, length) {
    let password = ''
    let typeCount = lower + upper + number + symbol
    let typeArr = [{lower}, {upper}, {number}, {symbol}].filter(item => Object.values(item)[0])
    if (typeCount === 0) return ''
    for(let i = 0; i < length; i+=typeCount){
        typeArr.forEach(type => {
            let funcName = Object.keys(type)[0]
            password += randomFunc[funcName]()
        })
    }
    return password
}